home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 2.0 Developer Kit / QuickTime 2.0 Developer Kit.iso / mac / MAC / Programming Stuff / Interfaces / PInterfaces / OSUtils.p < prev    next >
Encoding:
Text File  |  1994-11-11  |  13.0 KB  |  521 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        OSUtils.p
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a3  ETO #16, MPW prerelease.  Friday, November 11, 1994. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. }
  16.  
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT OSUtils;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __OSUTILS__}
  27. {$SETC __OSUTILS__ := 1}
  28.  
  29. {$I+}
  30. {$SETC OSUtilsIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {    ConditionalMacros.p                                            }
  38.  
  39. {$IFC UNDEFINED __MIXEDMODE__}
  40. {$I MixedMode.p}
  41. {$ENDC}
  42.  
  43. {$IFC UNDEFINED __MEMORY__}
  44. {$I Memory.p}
  45. {$ENDC}
  46.  
  47. {$PUSH}
  48. {$ALIGN MAC68K}
  49. {$LibExport+}
  50.  
  51. CONST
  52.     useFree                        = 0;
  53.     useATalk                    = 1;
  54.     useAsync                    = 2;
  55.     useExtClk                    = 3;                            {Externally clocked}
  56.     useMIDI                        = 4;
  57. { Environs Equates }
  58.     curSysEnvVers                = 2;                            {Updated to equal latest SysEnvirons version}
  59. { Machine Types }
  60.     envMac                        = -1;
  61.     envXL                        = -2;
  62.     envMachUnknown                = 0;
  63.     env512KE                    = 1;
  64.     envMacPlus                    = 2;
  65.     envSE                        = 3;
  66.     envMacII                    = 4;
  67.     envMacIIx                    = 5;
  68.     envMacIIcx                    = 6;
  69.     envSE30                        = 7;
  70.     envPortable                    = 8;
  71.     envMacIIci                    = 9;
  72.     envMacIIfx                    = 11;
  73. { CPU types }
  74.     envCPUUnknown                = 0;
  75.  
  76.     env68000                    = 1;
  77.     env68010                    = 2;
  78.     env68020                    = 3;
  79.     env68030                    = 4;
  80.     env68040                    = 5;
  81. { Keyboard types }
  82.     envUnknownKbd                = 0;
  83.     envMacKbd                    = 1;
  84.     envMacAndPad                = 2;
  85.     envMacPlusKbd                = 3;
  86.     envAExtendKbd                = 4;
  87.     envStandADBKbd                = 5;
  88.     envPrtblADBKbd                = 6;
  89.     envPrtblISOKbd                = 7;
  90.     envStdISOADBKbd                = 8;
  91.     envExtISOADBKbd                = 9;
  92.     false32b                    = 0;                            {24 bit addressing error}
  93.     true32b                        = 1;                            {32 bit addressing error}
  94. { result types for RelString Call }
  95.     sortsBefore                    = -1;                            {first string < second string}
  96.     sortsEqual                    = 0;                            {first string = second string}
  97.     sortsAfter                    = 1;                            {first string > second string}
  98.  
  99. { Toggle results }
  100.     toggleUndefined                = 0;
  101.     toggleOK                    = 1;
  102.     toggleBadField                = 2;
  103.     toggleBadDelta                = 3;
  104.     toggleBadChar                = 4;
  105.     toggleUnknown                = 5;
  106.     toggleBadNum                = 6;
  107.     toggleOutOfRange            = 7;                            {synonym for toggleErr3}
  108.     toggleErr3                    = 7;
  109.     toggleErr4                    = 8;
  110.     toggleErr5                    = 9;
  111. { Date equates }
  112.     smallDateBit                = 31;                            {Restrict valid date/time to range of Time global}
  113.     togChar12HourBit            = 30;                            {If toggling hour by char, accept hours 1..12 only}
  114.     togCharZCycleBit            = 29;                            {Modifier for togChar12HourBit: accept hours 0..11 only}
  115.     togDelta12HourBit            = 28;                            {If toggling hour up/down, restrict to 12-hour range (am/pm)}
  116.     genCdevRangeBit                = 27;                            {Restrict date/time to range used by genl CDEV}
  117.     validDateFields                = -1;
  118.     maxDateField                = 10;
  119.     eraMask                        = $0001;
  120.     yearMask                    = $0002;
  121.     monthMask                    = $0004;
  122.     dayMask                        = $0008;
  123.     hourMask                    = $0010;
  124.     minuteMask                    = $0020;
  125.     secondMask                    = $0040;
  126.     dayOfWeekMask                = $0080;
  127.     dayOfYearMask                = $0100;
  128.     weekOfYearMask                = $0200;
  129.     pmMask                        = $0400;
  130.     dateStdMask                    = $007F;                        {default for ValidDate flags and ToggleDate TogglePB.togFlags}
  131.  
  132.     eraField                    = 0;
  133.     yearField                    = 1;
  134.     monthField                    = 2;
  135.     dayField                    = 3;
  136.     hourField                    = 4;
  137.     minuteField                    = 5;
  138.     secondField                    = 6;
  139.     dayOfWeekField                = 7;
  140.     dayOfYearField                = 8;
  141.     weekOfYearField                = 9;
  142.     pmField                        = 10;
  143.     res1Field                    = 11;
  144.     res2Field                    = 12;
  145.     res3Field                    = 13;
  146.  
  147.     
  148. TYPE
  149.     LongDateField = SignedByte;
  150.  
  151.  
  152. CONST
  153.     dummyType                    = 0;
  154.     vType                        = 1;
  155.     ioQType                        = 2;
  156.     drvQType                    = 3;
  157.     evType                        = 4;
  158.     fsQType                        = 5;
  159.     sIQType                        = 6;
  160.     dtQType                        = 7;
  161.     nmType                        = 8;
  162.  
  163.     
  164. TYPE
  165.     QTypes = SignedByte;
  166.  
  167.  
  168. CONST
  169.     OSTrap                        = 0;
  170.     ToolTrap                    = 1;
  171.  
  172.     
  173. TYPE
  174.     TrapType = SignedByte;
  175.  
  176.     SysParmType = PACKED RECORD
  177.         valid:                    UInt8;
  178.         aTalkA:                    UInt8;
  179.         aTalkB:                    UInt8;
  180.         config:                    UInt8;
  181.         portA:                    INTEGER;
  182.         portB:                    INTEGER;
  183.         alarm:                    LONGINT;
  184.         font:                    INTEGER;
  185.         kbdPrint:                INTEGER;
  186.         volClik:                INTEGER;
  187.         misc:                    INTEGER;
  188.     END;
  189.     SysPPtr = ^SysParmType;
  190.  
  191.     QElemPtr = ^QElem;
  192.  
  193.     QElem = RECORD
  194.         qLink:                    QElemPtr;
  195.         qType:                    INTEGER;
  196.         qData:                    ARRAY [0..0] OF INTEGER;
  197.     END;
  198.     QHdrPtr = ^QHdr;
  199.  
  200.     QHdr = RECORD
  201.         qFlags:                    INTEGER;
  202.         qHead:                    QElemPtr;
  203.         qTail:                    QElemPtr;
  204.     END;
  205.     {
  206.         DeferredTaskProcPtr uses register based parameters on the 68k and cannot
  207.         be written in or called from a high-level language without the help of
  208.         mixed mode or assembly glue.
  209.  
  210.         In:
  211.          => dtParam         A1.L
  212.     }
  213.     DeferredTaskProcPtr = ProcPtr;  { PROCEDURE DeferredTask(dtParam: LONGINT); }
  214.     DeferredTaskUPP = UniversalProcPtr;
  215.  
  216.     DeferredTask = RECORD
  217.         qLink:                    QElemPtr;
  218.         qType:                    INTEGER;
  219.         dtFlags:                INTEGER;
  220.         dtAddr:                    DeferredTaskUPP;
  221.         dtParam:                LONGINT;
  222.         dtReserved:                LONGINT;
  223.     END;
  224.     DeferredTaskPtr = ^DeferredTask;
  225.  
  226.     SysEnvRec = RECORD
  227.         environsVersion:        INTEGER;
  228.         machineType:            INTEGER;
  229.         systemVersion:            INTEGER;
  230.         processor:                INTEGER;
  231.         hasFPU:                    BOOLEAN;
  232.         hasColorQD:                BOOLEAN;
  233.         keyBoardType:            INTEGER;
  234.         atDrvrVersNum:            INTEGER;
  235.         sysVRefNum:                INTEGER;
  236.     END;
  237.     MachineLocation = RECORD
  238.         latitude:                Fract;
  239.         longitude:                Fract;
  240.         CASE INTEGER OF
  241.         0: (
  242.             dlsDelta:                    SInt8;                                {signed byte; daylight savings delta}
  243.            );
  244.         1: (
  245.             gmtDelta:                    LONGINT;                            {must mask - see documentation}
  246.            );
  247.     END;
  248.     DateTimeRec = RECORD
  249.         year:                    INTEGER;
  250.         month:                    INTEGER;
  251.         day:                    INTEGER;
  252.         hour:                    INTEGER;
  253.         minute:                    INTEGER;
  254.         second:                    INTEGER;
  255.         dayOfWeek:                INTEGER;
  256.     END;
  257.     LongDateTime = wide;
  258.  
  259.     LongDateCvt = RECORD
  260.         CASE INTEGER OF
  261.         0: (
  262.             c:                            wide;
  263.            );
  264.         1: (
  265.             lHigh:                        UInt32;
  266.             lLow:                        UInt32;
  267.            );
  268.     END;
  269.     LongDateRec = RECORD
  270.         CASE INTEGER OF
  271.         0: (
  272.             era:                        INTEGER;
  273.             year:                        INTEGER;
  274.             month:                        INTEGER;
  275.             day:                        INTEGER;
  276.             hour:                        INTEGER;
  277.             minute:                        INTEGER;
  278.             second:                        INTEGER;
  279.             dayOfWeek:                    INTEGER;
  280.             dayOfYear:                    INTEGER;
  281.             weekOfYear:                    INTEGER;
  282.             pm:                            INTEGER;
  283.             res1:                        INTEGER;
  284.             res2:                        INTEGER;
  285.             res3:                        INTEGER;
  286.            );
  287.         1: (
  288.             list:                        ARRAY [0..13] OF INTEGER;            {Index by LongDateField!}
  289.            );
  290.         2: (
  291.             eraAlt:                        INTEGER;
  292.             oldDate:                    DateTimeRec;
  293.            );
  294.     END;
  295.     DateDelta = SInt8;
  296.  
  297.     TogglePB = RECORD
  298.         togFlags:                LONGINT;                                {caller normally sets low word to dateStdMask=$7F}
  299.         amChars:                ResType;                                {from 'itl0', but uppercased}
  300.         pmChars:                ResType;                                {from 'itl0', but uppercased}
  301.         reserved:                ARRAY [0..3] OF LONGINT;
  302.     END;
  303.     ToggleResults = INTEGER;
  304.  
  305. CONST
  306.     uppDeferredTaskProcInfo = $0000B802; { Register PROCEDURE (4 bytes in A1); }
  307.  
  308. FUNCTION NewDeferredTaskProc(userRoutine: DeferredTaskProcPtr): DeferredTaskUPP;
  309.     {$IFC NOT GENERATINGCFM }
  310.     INLINE $2E9F;
  311.     {$ENDC}
  312.  
  313. PROCEDURE CallDeferredTaskProc(dtParam: LONGINT; userRoutine: DeferredTaskUPP);
  314.     {$IFC NOT GENERATINGCFM}
  315.     {To be implemented:  Glue to move parameters into registers.}
  316.     {$ENDC}
  317.  
  318. PROCEDURE LongDateToSeconds({CONST}VAR lDate: LongDateRec; VAR lSecs: LongDateTime);
  319.     {$IFC NOT GENERATINGCFM}
  320.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  321.     {$ENDC}
  322. PROCEDURE LongSecondsToDate(VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  323.     {$IFC NOT GENERATINGCFM}
  324.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  325.     {$ENDC}
  326. FUNCTION ToggleDate(VAR lSecs: LongDateTime; field: ByteParameter; delta: ByteParameter; ch: INTEGER; {CONST}VAR params: TogglePB): ToggleResults;
  327.     {$IFC NOT GENERATINGCFM}
  328.     INLINE $2F3C, $820E, $FFEE, $A8B5;
  329.     {$ENDC}
  330. FUNCTION ValidDate({CONST}VAR vDate: LongDateRec; flags: LONGINT; VAR newSecs: LongDateTime): INTEGER;
  331.     {$IFC NOT GENERATINGCFM}
  332.     INLINE $2F3C, $820C, $FFE4, $A8B5;
  333.     {$ENDC}
  334. FUNCTION IsMetric: BOOLEAN;
  335.     {$IFC NOT GENERATINGCFM}
  336.     INLINE $3F3C, $0004, $A9ED;
  337.     {$ENDC}
  338. FUNCTION GetSysPPtr: SysPPtr;
  339.     {$IFC NOT GENERATINGCFM}
  340.     INLINE $2EBC, $0000, $01F8;
  341.     {$ENDC}
  342. FUNCTION ReadDateTime(VAR time: LONGINT): OSErr;
  343.     {$IFC NOT GENERATINGCFM}
  344.     INLINE $205F, $A039, $3E80;
  345.     {$ENDC}
  346. PROCEDURE GetDateTime(VAR secs: LONGINT);
  347.     {$IFC NOT GENERATINGCFM}
  348.     INLINE $205F, $20B8, $020C;
  349.     {$ENDC}
  350. FUNCTION SetDateTime(time: LONGINT): OSErr;
  351.     {$IFC NOT GENERATINGCFM}
  352.     INLINE $201F, $A03A, $3E80;
  353.     {$ENDC}
  354. PROCEDURE SetTime({CONST}VAR d: DateTimeRec);
  355.     {$IFC NOT GENERATINGCFM}
  356.     INLINE $205F, $A9C7, $A03A;
  357.     {$ENDC}
  358. PROCEDURE GetTime(VAR d: DateTimeRec);
  359.     {$IFC NOT GENERATINGCFM}
  360.     INLINE $205F, $2038, $020C, $A9C6;
  361.     {$ENDC}
  362. PROCEDURE DateToSeconds({CONST}VAR d: DateTimeRec; VAR secs: LONGINT);
  363. PROCEDURE SecondsToDate(secs: LONGINT; VAR d: DateTimeRec);
  364.     {$IFC NOT GENERATINGCFM}
  365.     INLINE $205F, $201F, $A9C6;
  366.     {$ENDC}
  367. PROCEDURE SysBeep(duration: INTEGER);
  368.     {$IFC NOT GENERATINGCFM}
  369.     INLINE $A9C8;
  370.     {$ENDC}
  371. FUNCTION DTInstall(dtTaskPtr: DeferredTaskPtr): OSErr;
  372.     {$IFC NOT GENERATINGCFM}
  373.     INLINE $205F, $A082, $3E80;
  374.     {$ENDC}
  375. FUNCTION GetMMUMode : ByteParameter;
  376.     {$IFC NOT CFMSYSTEMCALLS}
  377.     INLINE $1EB8, $0CB2;            { MOVE.B $0CB2,(SP) }
  378.     {$ENDC}
  379.  
  380. {$IFC GENERATING68K }
  381. PROCEDURE SwapMMUMode(VAR mode: SInt8);
  382.     {$IFC NOT GENERATINGCFM}
  383.     INLINE $205F, $1010, $A05D, $1080;
  384.     {$ENDC}
  385. {$ENDC}
  386. {$IFC SystemSixOrLater }
  387. FUNCTION SysEnvirons(versionRequested: INTEGER; VAR theWorld: SysEnvRec): OSErr;
  388.     {$IFC NOT GENERATINGCFM}
  389.     INLINE $205F, $301F, $A090, $3E80;
  390.     {$ENDC}
  391. {$ELSEC}
  392. FUNCTION SysEnvirons(versionRequested: INTEGER; VAR theWorld: SysEnvRec): OSErr;
  393. {$ENDC}
  394. PROCEDURE Delay(numTicks: LONGINT; VAR finalTicks: LONGINT);
  395.     {$IFC NOT GENERATINGCFM}
  396.     INLINE $225F, $205F, $A03B, $2280;
  397.     {$ENDC}
  398. {
  399.     GetTrapAddress and SetTrapAddress are obsolete and should not
  400.     be used. Always use NGetTrapAddress and NSetTrapAddress instead.
  401.     The old routines will not be supported for PowerPC apps.
  402. }
  403. {$IFC OLDROUTINENAMES  & NOT GENERATINGCFM }
  404. FUNCTION GetTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  405.     {$IFC NOT GENERATINGCFM}
  406.     INLINE $301F, $A146, $2E88;
  407.     {$ENDC}
  408. PROCEDURE SetTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  409.     {$IFC NOT GENERATINGCFM}
  410.     INLINE $301F, $205F, $A047;
  411.     {$ENDC}
  412. {$ENDC}
  413. FUNCTION NGetTrapAddress(trapNum: INTEGER; tTyp: ByteParameter): UniversalProcPtr;
  414. PROCEDURE NSetTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER; tTyp: ByteParameter);
  415. FUNCTION GetOSTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  416.     {$IFC NOT GENERATINGCFM}
  417.     INLINE $301F, $A346, $2E88;
  418.     {$ENDC}
  419. PROCEDURE SetOSTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  420.     {$IFC NOT GENERATINGCFM}
  421.     INLINE $301F, $205F, $A247;
  422.     {$ENDC}
  423. FUNCTION GetToolTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  424.     {$IFC NOT GENERATINGCFM}
  425.     INLINE $301F, $A746, $2E88;
  426.     {$ENDC}
  427. PROCEDURE SetToolTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  428.     {$IFC NOT GENERATINGCFM}
  429.     INLINE $301F, $205F, $A647;
  430.     {$ENDC}
  431. FUNCTION GetToolboxTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  432.     {$IFC NOT GENERATINGCFM}
  433.     INLINE $301F, $A746, $2E88;
  434.     {$ENDC}
  435. PROCEDURE SetToolboxTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  436.     {$IFC NOT GENERATINGCFM}
  437.     INLINE $301F, $205F, $A647;
  438.     {$ENDC}
  439. FUNCTION WriteParam: OSErr;
  440. PROCEDURE Enqueue(qElement: QElemPtr; qHeader: QHdrPtr);
  441.     {$IFC NOT GENERATINGCFM}
  442.     INLINE $225F, $205F, $A96F;
  443.     {$ENDC}
  444. FUNCTION Dequeue(qElement: QElemPtr; qHeader: QHdrPtr): OSErr;
  445.     {$IFC NOT GENERATINGCFM}
  446.     INLINE $225F, $205F, $A96E, $3E80;
  447.     {$ENDC}
  448. FUNCTION SetCurrentA5: LONGINT;
  449.     {$IFC NOT GENERATINGCFM}
  450.     INLINE $2E8D, $2A78, $0904;
  451.     {$ENDC}
  452. FUNCTION SetA5(newA5: LONGINT): LONGINT;
  453.     {$IFC NOT GENERATINGCFM}
  454.     INLINE $2F4D, $0004, $2A5F;
  455.     {$ENDC}
  456. {$IFC NOT SystemSevenOrLater }
  457. PROCEDURE Environs(VAR rom: INTEGER; VAR machine: INTEGER);
  458. {$ENDC}
  459. FUNCTION InitUtil: OSErr;
  460.     {$IFC NOT GENERATINGCFM}
  461.     INLINE $A03F, $3E80;
  462.     {$ENDC}
  463. {$IFC GENERATING68K }
  464. FUNCTION SwapInstructionCache(cacheEnable: BOOLEAN): BOOLEAN;
  465. PROCEDURE FlushInstructionCache;
  466.     {$IFC NOT GENERATINGCFM}
  467.     INLINE $7001, $A098;
  468.     {$ENDC}
  469. FUNCTION SwapDataCache(cacheEnable: BOOLEAN): BOOLEAN;
  470. PROCEDURE FlushDataCache;
  471.     {$IFC NOT GENERATINGCFM}
  472.     INLINE $7003, $A098;
  473.     {$ENDC}
  474. PROCEDURE FlushCodeCache;
  475.     {$IFC NOT GENERATINGCFM}
  476.     INLINE $A0BD;
  477.     {$ENDC}
  478. PROCEDURE FlushCodeCacheRange(address: UNIV Ptr; count: LONGINT);
  479.     {$IFC NOT GENERATINGCFM}
  480.     INLINE $225F, $205F, $7009, $A098;
  481.     {$ENDC}
  482. {$ENDC}
  483. PROCEDURE ReadLocation(VAR loc: MachineLocation);
  484.     {$IFC NOT GENERATINGCFM}
  485.     INLINE $205F, $203C, $000C, $00E4, $A051;
  486.     {$ENDC}
  487. PROCEDURE WriteLocation({CONST}VAR loc: MachineLocation);
  488.     {$IFC NOT GENERATINGCFM}
  489.     INLINE $205F, $203C, $000C, $00E4, $A052;
  490.     {$ENDC}
  491. {$IFC OLDROUTINENAMES }
  492. PROCEDURE LongDate2Secs({CONST}VAR lDate: LongDateRec; VAR lSecs: LongDateTime);
  493.     {$IFC NOT GENERATINGCFM}
  494.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  495.     {$ENDC}
  496. PROCEDURE LongSecs2Date(VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  497.     {$IFC NOT GENERATINGCFM}
  498.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  499.     {$ENDC}
  500. FUNCTION IUMetric: BOOLEAN;
  501.     {$IFC NOT GENERATINGCFM}
  502.     INLINE $3F3C, $0004, $A9ED;
  503.     {$ENDC}
  504. PROCEDURE Date2Secs({CONST}VAR d: DateTimeRec; VAR secs: LONGINT);
  505. PROCEDURE Secs2Date(secs: LONGINT; VAR d: DateTimeRec);
  506.     {$IFC NOT GENERATINGCFM}
  507.     INLINE $205F, $201F, $A9C6;
  508.     {$ENDC}
  509. {$ENDC}
  510.  
  511. {$ALIGN RESET}
  512. {$POP}
  513.  
  514. {$SETC UsingIncludes := OSUtilsIncludes}
  515.  
  516. {$ENDC} {__OSUTILS__}
  517.  
  518. {$IFC NOT UsingIncludes}
  519.  END.
  520. {$ENDC}
  521.